// 本地购物车管理工具

// 本地购物车存储键名
const LOCAL_CART_KEY = 'local_cart_items';

// 获取本地购物车数据
const getLocalCart = () => {
  return wx.getStorageSync(LOCAL_CART_KEY) || [];
};

// 保存本地购物车数据
const saveLocalCart = (cartItems) => {
  wx.setStorageSync(LOCAL_CART_KEY, cartItems);
};

// 添加商品到本地购物车
const addToLocalCart = (food, count = 1, spec = null) => {
  const localCart = getLocalCart();
  
  // 查找商品是否已存在于购物车
  const existingItemIndex = localCart.findIndex(item => 
    item.food === food.id && 
    (spec === null ? item.spec === null : item.spec === spec.id)
  );
  
  if (existingItemIndex >= 0) {
    // 如果商品已存在，更新数量
    localCart[existingItemIndex].count += count;
    
    // 同时更新总价
    const unitPrice = food.price || 0;
    localCart[existingItemIndex].total_price = (unitPrice * localCart[existingItemIndex].count).toFixed(2);
  } else {
    // 如果商品不存在，添加新商品
    const unitPrice = food.price || 0;
    localCart.push({
      food: food.id,
      food_info: food,
      spec: spec ? spec.id : null,
      spec_info: spec,
      count: count,
      unit_price: unitPrice,
      total_price: (unitPrice * count).toFixed(2),
      is_checked: true,
      // 添加本地标记，登录后用于区分本地和服务器数据
      is_local: true
    });
  }
  
  // 保存更新后的购物车
  saveLocalCart(localCart);
  
  return localCart;
};

// 从本地购物车移除商品
const removeFromLocalCart = (foodId, specId = null) => {
  let localCart = getLocalCart();
  
  // 过滤掉要移除的商品
  localCart = localCart.filter(item => 
    !(item.food === foodId && (specId === null ? item.spec === null : item.spec === specId))
  );
  
  // 保存更新后的购物车
  saveLocalCart(localCart);
  
  return localCart;
};

// 更新本地购物车商品数量
const updateLocalCartItemCount = (foodId, count, specId = null) => {
  const localCart = getLocalCart();
  
  // 查找商品
  const existingItemIndex = localCart.findIndex(item => 
    item.food === foodId && 
    (specId === null ? item.spec === null : item.spec === specId)
  );
  
  if (existingItemIndex >= 0) {
    if (count <= 0) {
      // 如果数量小于等于0，从购物车中移除
      localCart.splice(existingItemIndex, 1);
    } else {
      // 否则更新数量
      localCart[existingItemIndex].count = count;
      
      // 同时更新总价
      const unitPrice = localCart[existingItemIndex].unit_price || 0;
      localCart[existingItemIndex].total_price = (unitPrice * count).toFixed(2);
    }
    
    // 保存更新后的购物车
    saveLocalCart(localCart);
  }
  
  return localCart;
};

// 清空本地购物车
const clearLocalCart = () => {
  wx.removeStorageSync(LOCAL_CART_KEY);
};

// 同步本地购物车到服务器
const syncLocalCartToServer = (api) => {
  const localCart = getLocalCart();
  if (!localCart || localCart.length === 0) return Promise.resolve([]);
  
  // 使用Promise.all处理多个添加购物车的请求
  const promises = localCart.map(item => {
    return api.cart.add({ 
      food: item.food, 
      count: item.count,
      spec: item.spec
    }).catch(err => {
      console.error('同步购物车项失败:', err);
      return null; // 失败时返回null
    });
  });
  
  return Promise.all(promises)
    .then(results => {
      // 清空本地购物车
      clearLocalCart();
      return results.filter(r => r !== null); // 过滤掉同步失败的项
    });
};

// 检查本地购物车是否有商品
const hasItemsInLocalCart = () => {
  const localCart = getLocalCart();
  return localCart && localCart.length > 0;
};

// 根据商品ID获取本地购物车中的商品数量
const getLocalCartItemCount = (foodId, specId = null) => {
  const localCart = getLocalCart();
  const item = localCart.find(item => 
    item.food === foodId && 
    (specId === null ? item.spec === null : item.spec === specId)
  );
  
  return item ? item.count : 0;
};

// 导出功能
module.exports = {
  getLocalCart,
  addToLocalCart,
  removeFromLocalCart,
  updateLocalCartItemCount,
  clearLocalCart,
  syncLocalCartToServer,
  hasItemsInLocalCart,
  getLocalCartItemCount
}; 